package org.fisco.bcos.sdk.demo.contract;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.fisco.bcos.sdk.v3.client.Client;
import org.fisco.bcos.sdk.v3.codec.abi.FunctionEncoder;
import org.fisco.bcos.sdk.v3.codec.datatypes.Address;
import org.fisco.bcos.sdk.v3.codec.datatypes.Bool;
import org.fisco.bcos.sdk.v3.codec.datatypes.DynamicArray;
import org.fisco.bcos.sdk.v3.codec.datatypes.Event;
import org.fisco.bcos.sdk.v3.codec.datatypes.Function;
import org.fisco.bcos.sdk.v3.codec.datatypes.Type;
import org.fisco.bcos.sdk.v3.codec.datatypes.TypeReference;
import org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple3;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple7;
import org.fisco.bcos.sdk.v3.contract.Contract;
import org.fisco.bcos.sdk.v3.crypto.CryptoSuite;
import org.fisco.bcos.sdk.v3.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.v3.model.CryptoType;
import org.fisco.bcos.sdk.v3.model.TransactionReceipt;
import org.fisco.bcos.sdk.v3.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.v3.transaction.model.exception.ContractException;

@SuppressWarnings("unchecked")
public class Evidence extends Contract {
    public static final String[] BINARY_ARRAY = {
        "60806040523480156200001157600080fd5b50604051620016483803806200164883398101604081905262000034916200045e565b600780546001600160a01b0319166001600160a01b0384161790556200005a8162000237565b15620001e3578751620000759060009060208b0190620002af565b5086516200008b9060019060208a0190620002af565b508551620000a1906002906020890190620002af565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b60208204018054601f9092166101000a60ff8181021990931692891602919091179055600480548083019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01859055600580548083019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0018490556006805491820181556000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b0383161790556040517f6001b9d5afd61e6053e8a73e30790ef8240d919a754055049131521927fbe21190620001d5908a908a908a908a908a908a908a9062000569565b60405180910390a162000229565b7f45cb885dcdccd3bece3cb78b963aec501f1cf9756fd93584f0643c7a953343108888888888888860405162000220979695949392919062000569565b60405180910390a15b505050505050505062000643565b6007546040516363a9c3d760e01b81526001600160a01b03838116600483015260009216906363a9c3d790602401602060405180830381865afa15801562000283573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a99190620005db565b92915050565b828054620002bd9062000606565b90600052602060002090601f016020900481019282620002e157600085556200032c565b82601f10620002fc57805160ff19168380011785556200032c565b828001600101855582156200032c579182015b828111156200032c5782518255916020019190600101906200030f565b506200033a9291506200033e565b5090565b5b808211156200033a57600081556001016200033f565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003885781810151838201526020016200036e565b8381111562000398576000848401525b50505050565b600082601f830112620003b057600080fd5b81516001600160401b0380821115620003cd57620003cd62000355565b604051601f8301601f19908116603f01168101908282118183101715620003f857620003f862000355565b816040528381528660208588010111156200041257600080fd5b620004258460208301602089016200036b565b9695505050505050565b805160ff811681146200044157600080fd5b919050565b80516001600160a01b03811681146200044157600080fd5b600080600080600080600080610100898b0312156200047c57600080fd5b88516001600160401b03808211156200049457600080fd5b620004a28c838d016200039e565b995060208b0151915080821115620004b957600080fd5b620004c78c838d016200039e565b985060408b0151915080821115620004de57600080fd5b50620004ed8b828c016200039e565b965050620004fe60608a016200042f565b94506080890151935060a089015192506200051c60c08a0162000446565b91506200052c60e08a0162000446565b90509295985092959890939650565b60008151808452620005558160208601602086016200036b565b601f01601f19169290920160200192915050565b60e0815260006200057e60e083018a6200053b565b828103602084015262000592818a6200053b565b90508281036040840152620005a881896200053b565b60ff9790971660608401525050608081019390935260a08301919091526001600160a01b031660c0909101529392505050565b600060208284031215620005ee57600080fd5b81518015158114620005ff57600080fd5b9392505050565b600181811c908216806200061b57607f821691505b602082108114156200063d57634e487b7160e01b600052602260045260246000fd5b50919050565b610ff580620006536000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80633b52ebd01461006757806348f85bce14610097578063596f21f8146100ba57806394cf795e146100d5578063c7eaf9b4146100ea578063dc58ab11146100ff575b600080fd5b60075461007a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100aa6100a5366004610b04565b610112565b604051901515815260200161008e565b6100c261041e565b60405161008e9796959493929190610c00565b6100dd61087e565b60405161008e9190610cbe565b6100f26109fd565b60405161008e9190610cd1565b6100aa61010d366004610cfc565b610a8f565b6000805b600654811015610289576006818154811061013357610133610d19565b6000918252602090912001546001600160a01b0316331415610277578460ff166003828154811061016657610166610d19565b60009182526020918290209181049091015460ff601f9092166101000a9004161480156101af575083600482815481106101a2576101a2610d19565b9060005260206000200154145b80156101d7575082600582815481106101ca576101ca610d19565b9060005260206000200154145b1561022a577fcb265a1c827beb2fd9947f2a8d4725c8918f266faf695a26a53ac662e42a2f3f60006001600288888860405161021896959493929190610e0a565b60405180910390a16001915050610417565b7f05e85d72e83e8d2c8c877a19dd3a15c60415f315dc6d176b21537216537d2757600060028787873360405161026596959493929190610e65565b60405180910390a16000915050610417565b8061028181610ebc565b915050610116565b5061029333610a8f565b156103cd57600380546001818101909255602081047fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01805460ff808916601f9094166101000a93840293021916919091179055600480548083019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01849055600580548083019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00183905560068054808301825560009182527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b031916331790556040517fbf474e795141390215f4f179557402a28c562b860f7b74dce4a3c0e0604cd97e926103bd9291600290899089908990610e0a565b60405180910390a1506001610417565b7fc585b66a303b685f03874907af9278712998ea1acfed37bcb4277da02cddb8b46000600160028787873360405161040b9796959493929190610ee5565b60405180910390a15060005b9392505050565b60608060608060608060606000600760009054906101000a90046001600160a01b03166001600160a01b031663fa69efbd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561047e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a29190610f51565b905060008167ffffffffffffffff8111156104bf576104bf610f6a565b6040519080825280602002602001820160405280156104e8578160200160208202803683370190505b50905060005b8281101561059f57600754604051631fff7f2760e11b8152600481018390526001600160a01b0390911690633ffefe4e90602401602060405180830381865afa15801561053f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105639190610f80565b82828151811061057557610575610d19565b6001600160a01b03909216602092830291909101909101528061059781610ebc565b9150506104ee565b50600060016002600360046005868680546105b990610d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546105e590610d2f565b80156106325780601f1061060757610100808354040283529160200191610632565b820191906000526020600020905b81548152906001019060200180831161061557829003601f168201915b5050505050965085805461064590610d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461067190610d2f565b80156106be5780601f10610693576101008083540402835291602001916106be565b820191906000526020600020905b8154815290600101906020018083116106a157829003601f168201915b505050505095508480546106d190610d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546106fd90610d2f565b801561074a5780601f1061071f5761010080835404028352916020019161074a565b820191906000526020600020905b81548152906001019060200180831161072d57829003601f168201915b50505050509450838054806020026020016040519081016040528092919081815260200182805480156107ba57602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161078b5790505b505050505093508280548060200260200160405190810160405280929190818152602001828054801561080c57602002820191906000526020600020905b8154815260200190600101908083116107f8575b505050505092508180548060200260200160405190810160405280929190818152602001828054801561085e57602002820191906000526020600020905b81548152602001906001019080831161084a575b505050505091509850985098509850985098509850505090919293949596565b60606000600760009054906101000a90046001600160a01b03166001600160a01b031663fa69efbd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f99190610f51565b905060008167ffffffffffffffff81111561091657610916610f6a565b60405190808252806020026020018201604052801561093f578160200160208202803683370190505b50905060005b828110156109f657600754604051631fff7f2760e11b8152600481018390526001600160a01b0390911690633ffefe4e90602401602060405180830381865afa158015610996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052",
        "508101906109ba9190610f80565b8282815181106109cc576109cc610d19565b6001600160a01b0390921660209283029190910190910152806109ee81610ebc565b915050610945565b5092915050565b606060018054610a0c90610d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3890610d2f565b8015610a855780601f10610a5a57610100808354040283529160200191610a85565b820191906000526020600020905b815481529060010190602001808311610a6857829003601f168201915b5050505050905090565b6007546040516363a9c3d760e01b81526001600160a01b03838116600483015260009216906363a9c3d790602401602060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afe9190610f9d565b92915050565b600080600060608486031215610b1957600080fd5b833560ff81168114610b2a57600080fd5b95602085013595506040909401359392505050565b6000815180845260005b81811015610b6557602081850181015186830182015201610b49565b81811115610b77576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015610bbc57815187529582019590820190600101610ba0565b509495945050505050565b600081518084526020808501945080840160005b83811015610bbc5781516001600160a01b031687529582019590820190600101610bdb565b60e081526000610c1360e083018a610b3f565b602083820381850152610c26828b610b3f565b91508382036040850152610c3a828a610b3f565b84810360608601528851808252828a0193509082019060005b81811015610c7257845160ff1683529383019391830191600101610c53565b50508481036080860152610c868189610b8c565b9250505082810360a0840152610c9c8186610b8c565b905082810360c0840152610cb08185610bc7565b9a9950505050505050505050565b6020815260006104176020830184610bc7565b6020815260006104176020830184610b3f565b6001600160a01b0381168114610cf957600080fd5b50565b600060208284031215610d0e57600080fd5b813561041781610ce4565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680610d4357607f821691505b60208210811415610d6457634e487b7160e01b600052602260045260246000fd5b50919050565b8054600090600181811c9080831680610d8457607f831692505b6020808410821415610da657634e487b7160e01b600052602260045260246000fd5b83885260208801828015610dc15760018114610dd257610dfd565b60ff19871682528282019750610dfd565b60008981526020902060005b87811015610df757815484820152908601908401610dde565b83019850505b5050505050505092915050565b60c081526000610e1d60c0830189610d6a565b8281036020840152610e2f8189610d6a565b90508281036040840152610e438188610d6a565b60ff9690961660608401525050608081019290925260a0909101529392505050565b60c081526000610e7860c0830189610d6a565b8281036020840152610e8a8189610d6a565b60ff9790971660408401525050606081019390935260808301919091526001600160a01b031660a09091015292915050565b6000600019821415610ede57634e487b7160e01b600052601160045260246000fd5b5060010190565b60e081526000610ef860e083018a610d6a565b8281036020840152610f0a818a610d6a565b90508281036040840152610f1e8189610d6a565b60ff9790971660608401525050608081019390935260a08301919091526001600160a01b031660c0909101529392505050565b600060208284031215610f6357600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215610f9257600080fd5b815161041781610ce4565b600060208284031215610faf57600080fd5b8151801515811461041757600080fdfea26469706673582212207eb0b78f95777b98ca2ebde6b8da93d913da291559d1c4154cd98c72618e80ce64736f6c634300080b0033"
    };

    public static final String BINARY =
            org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {
        "60806040523480156200001157600080fd5b506040516200164c3803806200164c83398101604081905262000034916200045e565b600780546001600160a01b0319166001600160a01b0384161790556200005a8162000237565b15620001e3578751620000759060009060208b0190620002af565b5086516200008b9060019060208a0190620002af565b508551620000a1906002906020890190620002af565b506003805460018082019092557fae94993e7b890b5284f478c67dcac658c87fd13e30b94b69c4e34c377a2b451c60208204018054601f9092166101000a60ff8181021990931692891602919091179055600480548083019091557ff6edf6853d0bfb8a1466d7212ac8f73c9fb8e1c4257bb19a3f13f12f35a67fe101859055600580548083019091557f7007368c9e4bf4eb4693ad76ae78762b6c0e97760aa7ac9baa975fe484d9a029018490556006805491820181556000527fa26d67b36928e909a2a4db51de73963e974ca036ae1fd765867a117ed45436160180546001600160a01b0319166001600160a01b0383161790556040517f629a262413663d625f3de82225a9e0aaa937cc7350a27a8912c4e4eaeefdc41b90620001d5908a908a908a908a908a908a908a9062000569565b60405180910390a162000229565b7f8be1d819c7c3bca88819d130732e2a5c7552ce195e0d6c07fc77612b5b42baa58888888888888860405162000220979695949392919062000569565b60405180910390a15b505050505050505062000643565b600754604051632372162f60e21b81526001600160a01b0383811660048301526000921690638dc858bc90602401602060405180830381865afa15801562000283573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a99190620005db565b92915050565b828054620002bd9062000606565b90600052602060002090601f016020900481019282620002e157600085556200032c565b82601f10620002fc57805160ff19168380011785556200032c565b828001600101855582156200032c579182015b828111156200032c5782518255916020019190600101906200030f565b506200033a9291506200033e565b5090565b5b808211156200033a57600081556001016200033f565b63b95aa35560e01b600052604160045260246000fd5b60005b83811015620003885781810151838201526020016200036e565b8381111562000398576000848401525b50505050565b600082601f830112620003b057600080fd5b81516001600160401b0380821115620003cd57620003cd62000355565b604051601f8301601f19908116603f01168101908282118183101715620003f857620003f862000355565b816040528381528660208588010111156200041257600080fd5b620004258460208301602089016200036b565b9695505050505050565b805160ff811681146200044157600080fd5b919050565b80516001600160a01b03811681146200044157600080fd5b600080600080600080600080610100898b0312156200047c57600080fd5b88516001600160401b03808211156200049457600080fd5b620004a28c838d016200039e565b995060208b0151915080821115620004b957600080fd5b620004c78c838d016200039e565b985060408b0151915080821115620004de57600080fd5b50620004ed8b828c016200039e565b965050620004fe60608a016200042f565b94506080890151935060a089015192506200051c60c08a0162000446565b91506200052c60e08a0162000446565b90509295985092959890939650565b60008151808452620005558160208601602086016200036b565b601f01601f19169290920160200192915050565b60e0815260006200057e60e083018a6200053b565b828103602084015262000592818a6200053b565b90508281036040840152620005a881896200053b565b60ff9790971660608401525050608081019390935260a08301919091526001600160a01b031660c0909101529392505050565b600060208284031215620005ee57600080fd5b81518015158114620005ff57600080fd5b9392505050565b600181811c908216806200061b57607f821691505b602082108114156200063d5763b95aa35560e01b600052602260045260246000fd5b50919050565b610ff980620006536000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806319cd5714146100675780632ca21083146100855780634ae70cef146100b05780635a61c629146100cb578063995297f3146100ee578063eb56789e14610103575b600080fd5b61006f610116565b60405161007c9190610b4c565b60405180910390f35b600754610098906001600160a01b031681565b6040516001600160a01b03909116815260200161007c565b6100b8610295565b60405161007c9796959493929190610bdc565b6100de6100d9366004610cb2565b6106f5565b604051901515815260200161007c565b6100f661076a565b60405161007c9190610ccf565b6100de610111366004610ce2565b6107fc565b60606000600760009054906101000a90046001600160a01b03166001600160a01b03166327f081a16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561016d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101919190610d1d565b905060008167ffffffffffffffff8111156101ae576101ae610d36565b6040519080825280602002602001820160405280156101d7578160200160208202803683370190505b50905060005b8281101561028e5760075460405163135fa43160e01b8152600481018390526001600160a01b039091169063135fa43190602401602060405180830381865afa15801561022e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102529190610d4c565b82828151811061026457610264610d69565b6001600160a01b03909216602092830291909101909101528061028681610d7f565b9150506101dd565b5092915050565b60608060608060608060606000600760009054906101000a90046001600160a01b03166001600160a01b03166327f081a16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103199190610d1d565b905060008167ffffffffffffffff81111561033657610336610d36565b60405190808252806020026020018201604052801561035f578160200160208202803683370190505b50905060005b828110156104165760075460405163135fa43160e01b8152600481018390526001600160a01b039091169063135fa43190602401602060405180830381865afa1580156103b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103da9190610d4c565b8282815181106103ec576103ec610d69565b6001600160a01b03909216602092830291909101909101528061040e81610d7f565b915050610365565b506000600160026003600460058686805461043090610da8565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90610da8565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b505050505096508580546104bc90610da8565b80601f01602080910402602001604051908101604052809291908181526020018280546104e890610da8565b80156105355780601f1061050a57610100808354040283529160200191610535565b820191906000526020600020905b81548152906001019060200180831161051857829003601f168201915b5050505050955084805461054890610da8565b80601f016020809104026020016040519081016040528092919081815260200182805461057490610da8565b80156105c15780601f10610596576101008083540402835291602001916105c1565b820191906000526020600020905b8154815290600101906020018083116105a457829003601f168201915b505050505094508380548060200260200160405190810160405280929190818152602001828054801561063157602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116106025790505b505050505093508280548060200260200160405190810160405280929190818152602001828054801561068357602002820191906000526020600020905b81548152602001906001019080831161066f575b50505050509250818054806020026020016040519081016040528092919081815260200182805480156106d557602002820191906000526020600020905b8154815260200190600101908083116106c1575b505050505091509850985098509850985098509850505090919293949596565b600754604051632372162f60e21b81526001600160a01b0383811660048301526000921690638dc858bc90602401602060405180830381865afa158015610740573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107649190610de3565b92915050565b60606001805461077990610da8565b80601f01602080910402602001604051908101604052809291908181526020018280546107a590610da8565b80156107f25780601f106107c7576101008083540402835291602001916107f2565b820191906000526020600020905b8154815290600101906020018083116107d557829003601f168201915b5050505050905090565b6000805b600654811015610973576006818154811061081d5761081d610d69565b6000918252602090912001546001600160a01b0316331415610961578460ff166003828154811061085057610850610d69565b60009182526020918290209181049091015460ff601f9092166101000a9004161480156108995750836004828154811061088c5761088c610d69565b9060005260206000200154145b80156108c1575082600582815481106108b4576108b4610d69565b9060005260206000200154145b15610914577f826650db8c892c9155ed1fcc1204b10e8bcabbd167a412fdcb042bb425b26a6060006001600288888860405161090296959493929190610ea5565b60405180910390a16001915050610b01565b7f9191cd56a3dc5c49c2da1ef5242904524a5527e316928fc43e99ff5fd671886b600060028787873360405161094f96959493929190610f00565b60405180910390a16000915050610b01565b8061096b81610d7f565b915050610800565b5061097d336106f5565b15610ab757600380546001818101909255602081047fae94993e7b890b5284f478c67dcac658c87fd13e30b94b69c4",
        "e34c377a2b451c01805460ff808916601f9094166101000a93840293021916919091179055600480548083019091557ff6edf6853d0bfb8a1466d7212ac8f73c9fb8e1c4257bb19a3f13f12f35a67fe101849055600580548083019091557f7007368c9e4bf4eb4693ad76ae78762b6c0e97760aa7ac9baa975fe484d9a0290183905560068054808301825560009182527fa26d67b36928e909a2a4db51de73963e974ca036ae1fd765867a117ed45436160180546001600160a01b031916331790556040517f66f629c3a441929a387f3eac1cd20a0c4ba770d0e91cb5683e578ffbd4c01d4192610aa79291600290899089908990610ea5565b60405180910390a1506001610b01565b7fc458ec2aee9906d6bef68aba9e19e30a46a280e06200f406dfdf8cbdee0bf5c760006001600287878733604051610af59796959493929190610f57565b60405180910390a15060005b9392505050565b600081518084526020808501945080840160005b83811015610b415781516001600160a01b031687529582019590820190600101610b1c565b509495945050505050565b602081526000610b016020830184610b08565b6000815180845260005b81811015610b8557602081850181015186830182015201610b69565b81811115610b97576000602083870101525b50601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015610b4157815187529582019590820190600101610bc0565b60e081526000610bef60e083018a610b5f565b602083820381850152610c02828b610b5f565b91508382036040850152610c16828a610b5f565b84810360608601528851808252828a0193509082019060005b81811015610c4e57845160ff1683529383019391830191600101610c2f565b50508481036080860152610c628189610bac565b9250505082810360a0840152610c788186610bac565b905082810360c0840152610c8c8185610b08565b9a9950505050505050505050565b6001600160a01b0381168114610caf57600080fd5b50565b600060208284031215610cc457600080fd5b8135610b0181610c9a565b602081526000610b016020830184610b5f565b600080600060608486031215610cf757600080fd5b833560ff81168114610d0857600080fd5b95602085013595506040909401359392505050565b600060208284031215610d2f57600080fd5b5051919050565b63b95aa35560e01b600052604160045260246000fd5b600060208284031215610d5e57600080fd5b8151610b0181610c9a565b63b95aa35560e01b600052603260045260246000fd5b6000600019821415610da15763b95aa35560e01b600052601160045260246000fd5b5060010190565b600181811c90821680610dbc57607f821691505b60208210811415610ddd5763b95aa35560e01b600052602260045260246000fd5b50919050565b600060208284031215610df557600080fd5b81518015158114610b0157600080fd5b8054600090600181811c9080831680610e1f57607f831692505b6020808410821415610e415763b95aa35560e01b600052602260045260246000fd5b83885260208801828015610e5c5760018114610e6d57610e98565b60ff19871682528282019750610e98565b60008981526020902060005b87811015610e9257815484820152908601908401610e79565b83019850505b5050505050505092915050565b60c081526000610eb860c0830189610e05565b8281036020840152610eca8189610e05565b90508281036040840152610ede8188610e05565b60ff9690961660608401525050608081019290925260a0909101529392505050565b60c081526000610f1360c0830189610e05565b8281036020840152610f258189610e05565b60ff9790971660408401525050606081019390935260808301919091526001600160a01b031660a09091015292915050565b60e081526000610f6a60e083018a610e05565b8281036020840152610f7c818a610e05565b90508281036040840152610f908189610e05565b60ff9790971660608401525050608081019390935260a08301919091526001600160a01b031660c090910152939250505056fea2646970667358221220f392dcf133bda4132f1e53676d7ab6f53e668c6f15342ec24c236d0d31cfda1964736f6c634300080b0033"
    };

    public static final String SM_BINARY =
            org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {
        "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"evi\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"evi\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"addRepeatSignaturesEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"evi\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"addSignaturesEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"evi\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"errorAddSignaturesEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"evi\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"errorNewSignaturesEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"evi\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"errorRepeatSignaturesEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"evi\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"newSignaturesEvent\",\"type\":\"event\"},{\"conflictFields\":[{\"kind\":0}],\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"CallVerify\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"selector\":[3696798481,1516357161],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0}],\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"addSignatures\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"selector\":[1224235982,3948312734],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0}],\"inputs\":[],\"name\":\"getEvidence\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"uint8[]\",\"name\":\"\",\"type\":\"uint8[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"},{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"selector\":[1500455416,1256656111],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":4,\"value\":[1]}],\"inputs\":[],\"name\":\"getEvidenceInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"selector\":[3354065332,2572326899],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0}],\"inputs\":[],\"name\":\"getSigners\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"selector\":[2496624990,432887572],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":4,\"value\":[7]}],\"inputs\":[],\"name\":\"signersAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"selector\":[995290064,748818563],\"stateMutability\":\"view\",\"type\":\"function\"}]"
    };

    public static final String ABI = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", ABI_ARRAY);

    public static final String FUNC_CALLVERIFY = "CallVerify";

    public static final String FUNC_ADDSIGNATURES = "addSignatures";

    public static final String FUNC_GETEVIDENCE = "getEvidence";

    public static final String FUNC_GETEVIDENCEINFO = "getEvidenceInfo";

    public static final String FUNC_GETSIGNERS = "getSigners";

    public static final String FUNC_SIGNERSADDR = "signersAddr";

    public static final Event ADDREPEATSIGNATURESEVENT_EVENT =
            new Event(
                    "addRepeatSignaturesEvent",
                    Arrays.<TypeReference<?>>asList(
                            new TypeReference<Utf8String>() {},
                            new TypeReference<Utf8String>() {},
                            new TypeReference<Utf8String>() {},
                            new TypeReference<Uint8>() {},
                            new TypeReference<Bytes32>() {},
                            new TypeReference<Bytes32>() {}));;

    public static final Event ADDSIGNATURESEVENT_EVENT =
            new Event(
                    "addSignaturesEvent",
                    Arrays.<TypeReference<?>>asList(
                            new TypeReference<Utf8String>() {},
                            new TypeReference<Utf8String>() {},
                            new TypeReference<Utf8String>() {},
                            new TypeReference<Uint8>() {},
                            new TypeReference<Bytes32>() {},
                            new TypeReference<Bytes32>() {}));;

    public static final Event ERRORADDSIGNATURESEVENT_EVENT =
            new Event(
                    "errorAddSignaturesEvent",
                    Arrays.<TypeReference<?>>asList(
                            new TypeReference<Utf8String>() {},
                            new TypeReference<Utf8String>() {},
                            new TypeReference<Utf8String>() {},
                            new TypeReference<Uint8>() {},
                            new TypeReference<Bytes32>() {},
                            new TypeReference<Bytes32>() {},
                            new TypeReference<Address>() {}));;

    public static final Event ERRORNEWSIGNATURESEVENT_EVENT =
            new Event(
                    "errorNewSignaturesEvent",
                    Arrays.<TypeReference<?>>asList(
                            new TypeReference<Utf8String>() {},
                            new TypeReference<Utf8String>() {},
                            new TypeReference<Utf8String>() {},
                            new TypeReference<Uint8>() {},
                            new TypeReference<Bytes32>() {},
                            new TypeReference<Bytes32>() {},
                            new TypeReference<Address>() {}));;

    public static final Event ERRORREPEATSIGNATURESEVENT_EVENT =
            new Event(
                    "errorRepeatSignaturesEvent",
                    Arrays.<TypeReference<?>>asList(
                            new TypeReference<Utf8String>() {},
                            new TypeReference<Utf8String>() {},
                            new TypeReference<Uint8>() {},
                            new TypeReference<Bytes32>() {},
                            new TypeReference<Bytes32>() {},
                            new TypeReference<Address>() {}));;

    public static final Event NEWSIGNATURESEVENT_EVENT =
            new Event(
                    "newSignaturesEvent",
                    Arrays.<TypeReference<?>>asList(
                            new TypeReference<Utf8String>() {},
                            new TypeReference<Utf8String>() {},
                            new TypeReference<Utf8String>() {},
                            new TypeReference<Uint8>() {},
                            new TypeReference<Bytes32>() {},
                            new TypeReference<Bytes32>() {},
                            new TypeReference<Address>() {}));;

    protected Evidence(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public static String getABI() {
        return ABI;
    }

    public List<AddRepeatSignaturesEventEventResponse> getAddRepeatSignaturesEventEvents(
            TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(ADDREPEATSIGNATURESEVENT_EVENT, transactionReceipt);
        ArrayList<AddRepeatSignaturesEventEventResponse> responses =
                new ArrayList<AddRepeatSignaturesEventEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            AddRepeatSignaturesEventEventResponse typedResponse =
                    new AddRepeatSignaturesEventEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.evi = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.info = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.id = (String) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.v = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.r = (byte[]) eventValues.getNonIndexedValues().get(4).getValue();
            typedResponse.s = (byte[]) eventValues.getNonIndexedValues().get(5).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<AddSignaturesEventEventResponse> getAddSignaturesEventEvents(
            TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(ADDSIGNATURESEVENT_EVENT, transactionReceipt);
        ArrayList<AddSignaturesEventEventResponse> responses =
                new ArrayList<AddSignaturesEventEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            AddSignaturesEventEventResponse typedResponse = new AddSignaturesEventEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.evi = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.info = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.id = (String) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.v = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.r = (byte[]) eventValues.getNonIndexedValues().get(4).getValue();
            typedResponse.s = (byte[]) eventValues.getNonIndexedValues().get(5).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<ErrorAddSignaturesEventEventResponse> getErrorAddSignaturesEventEvents(
            TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(ERRORADDSIGNATURESEVENT_EVENT, transactionReceipt);
        ArrayList<ErrorAddSignaturesEventEventResponse> responses =
                new ArrayList<ErrorAddSignaturesEventEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ErrorAddSignaturesEventEventResponse typedResponse =
                    new ErrorAddSignaturesEventEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.evi = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.info = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.id = (String) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.v = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.r = (byte[]) eventValues.getNonIndexedValues().get(4).getValue();
            typedResponse.s = (byte[]) eventValues.getNonIndexedValues().get(5).getValue();
            typedResponse.addr = (String) eventValues.getNonIndexedValues().get(6).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<ErrorNewSignaturesEventEventResponse> getErrorNewSignaturesEventEvents(
            TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(ERRORNEWSIGNATURESEVENT_EVENT, transactionReceipt);
        ArrayList<ErrorNewSignaturesEventEventResponse> responses =
                new ArrayList<ErrorNewSignaturesEventEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ErrorNewSignaturesEventEventResponse typedResponse =
                    new ErrorNewSignaturesEventEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.evi = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.info = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.id = (String) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.v = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.r = (byte[]) eventValues.getNonIndexedValues().get(4).getValue();
            typedResponse.s = (byte[]) eventValues.getNonIndexedValues().get(5).getValue();
            typedResponse.addr = (String) eventValues.getNonIndexedValues().get(6).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<ErrorRepeatSignaturesEventEventResponse> getErrorRepeatSignaturesEventEvents(
            TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(ERRORREPEATSIGNATURESEVENT_EVENT, transactionReceipt);
        ArrayList<ErrorRepeatSignaturesEventEventResponse> responses =
                new ArrayList<ErrorRepeatSignaturesEventEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ErrorRepeatSignaturesEventEventResponse typedResponse =
                    new ErrorRepeatSignaturesEventEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.evi = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.id = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.v = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.r = (byte[]) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.s = (byte[]) eventValues.getNonIndexedValues().get(4).getValue();
            typedResponse.addr = (String) eventValues.getNonIndexedValues().get(5).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<NewSignaturesEventEventResponse> getNewSignaturesEventEvents(
            TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(NEWSIGNATURESEVENT_EVENT, transactionReceipt);
        ArrayList<NewSignaturesEventEventResponse> responses =
                new ArrayList<NewSignaturesEventEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            NewSignaturesEventEventResponse typedResponse = new NewSignaturesEventEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.evi = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.info = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.id = (String) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.v = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.r = (byte[]) eventValues.getNonIndexedValues().get(4).getValue();
            typedResponse.s = (byte[]) eventValues.getNonIndexedValues().get(5).getValue();
            typedResponse.addr = (String) eventValues.getNonIndexedValues().get(6).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Boolean CallVerify(String addr) throws ContractException {
        final Function function =
                new Function(
                        FUNC_CALLVERIFY,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(addr)),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public TransactionReceipt addSignatures(BigInteger v, byte[] r, byte[] s) {
        final Function function =
                new Function(
                        FUNC_ADDSIGNATURES,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(v),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(r),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(s)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String getSignedTransactionForAddSignatures(BigInteger v, byte[] r, byte[] s) {
        final Function function =
                new Function(
                        FUNC_ADDSIGNATURES,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(v),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(r),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(s)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public String addSignatures(BigInteger v, byte[] r, byte[] s, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_ADDSIGNATURES,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(v),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(r),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(s)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public Tuple3<BigInteger, byte[], byte[]> getAddSignaturesInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_ADDSIGNATURES,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<Uint8>() {},
                                new TypeReference<Bytes32>() {},
                                new TypeReference<Bytes32>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<BigInteger, byte[], byte[]>(
                (BigInteger) results.get(0).getValue(),
                (byte[]) results.get(1).getValue(),
                (byte[]) results.get(2).getValue());
    }

    public Tuple1<Boolean> getAddSignaturesOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function =
                new Function(
                        FUNC_ADDSIGNATURES,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<Boolean>((Boolean) results.get(0).getValue());
    }

    public Tuple7<
                    String,
                    String,
                    String,
                    List<BigInteger>,
                    List<byte[]>,
                    List<byte[]>,
                    List<String>>
            getEvidence() throws ContractException {
        final Function function =
                new Function(
                        FUNC_GETEVIDENCE,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<Utf8String>() {},
                                new TypeReference<Utf8String>() {},
                                new TypeReference<Utf8String>() {},
                                new TypeReference<DynamicArray<Uint8>>() {},
                                new TypeReference<DynamicArray<Bytes32>>() {},
                                new TypeReference<DynamicArray<Bytes32>>() {},
                                new TypeReference<DynamicArray<Address>>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple7<
                String, String, String, List<BigInteger>, List<byte[]>, List<byte[]>, List<String>>(
                (String) results.get(0).getValue(),
                (String) results.get(1).getValue(),
                (String) results.get(2).getValue(),
                convertToNative((List<Uint8>) results.get(3).getValue()),
                convertToNative((List<Bytes32>) results.get(4).getValue()),
                convertToNative((List<Bytes32>) results.get(5).getValue()),
                convertToNative((List<Address>) results.get(6).getValue()));
    }

    public String getEvidenceInfo() throws ContractException {
        final Function function =
                new Function(
                        FUNC_GETEVIDENCEINFO,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public List getSigners() throws ContractException {
        final Function function =
                new Function(
                        FUNC_GETSIGNERS,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<DynamicArray<Address>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public String signersAddr() throws ContractException {
        final Function function =
                new Function(
                        FUNC_SIGNERSADDR,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public static Evidence load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new Evidence(contractAddress, client, credential);
    }

    public static Evidence deploy(
            Client client,
            CryptoKeyPair credential,
            String evi,
            String info,
            String id,
            BigInteger v,
            byte[] r,
            byte[] s,
            String addr,
            String sender)
            throws ContractException {
        byte[] encodedConstructor =
                FunctionEncoder.encodeConstructor(
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(evi),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(info),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(id),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(v),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(r),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(s),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(addr),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(sender)));
        return deploy(
                Evidence.class,
                client,
                credential,
                getBinary(client.getCryptoSuite()),
                getABI(),
                encodedConstructor,
                null);
    }

    public static class AddRepeatSignaturesEventEventResponse {
        public TransactionReceipt.Logs log;

        public String evi;

        public String info;

        public String id;

        public BigInteger v;

        public byte[] r;

        public byte[] s;
    }

    public static class AddSignaturesEventEventResponse {
        public TransactionReceipt.Logs log;

        public String evi;

        public String info;

        public String id;

        public BigInteger v;

        public byte[] r;

        public byte[] s;
    }

    public static class ErrorAddSignaturesEventEventResponse {
        public TransactionReceipt.Logs log;

        public String evi;

        public String info;

        public String id;

        public BigInteger v;

        public byte[] r;

        public byte[] s;

        public String addr;
    }

    public static class ErrorNewSignaturesEventEventResponse {
        public TransactionReceipt.Logs log;

        public String evi;

        public String info;

        public String id;

        public BigInteger v;

        public byte[] r;

        public byte[] s;

        public String addr;
    }

    public static class ErrorRepeatSignaturesEventEventResponse {
        public TransactionReceipt.Logs log;

        public String evi;

        public String id;

        public BigInteger v;

        public byte[] r;

        public byte[] s;

        public String addr;
    }

    public static class NewSignaturesEventEventResponse {
        public TransactionReceipt.Logs log;

        public String evi;

        public String info;

        public String id;

        public BigInteger v;

        public byte[] r;

        public byte[] s;

        public String addr;
    }
}
